package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.dto.VisaProductPageQueryDTO;
import com.sky.entity.Template;
import com.sky.entity.VisaProduct;
import com.sky.entity.VisaProductTemplate;
import com.sky.vo.VisaProductVO;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface VisaProductMapper {
    /**
     * 新增签证产品
     * @param visaProduct
     */
    @Insert("INSERT INTO visa_product (country_id, continent, region_id, visa_type_id, name, transact_time, price, " +
            "start_date, end_date, max_stay, entry_number, is_hot, is_show, create_time, update_time, user_notice) " +
            "VALUES (#{countryId}, #{continent}, #{regionId}, #{visaTypeId}, #{name}, #{transactTime}, #{price}, " +
            "#{startDate}, #{endDate}, #{maxStay}, #{entryNumber}, #{isHot}, #{isShow}, #{createTime}, #{updateTime}, #{userNotice})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(VisaProduct visaProduct);

    /**
     * 建立 visa_product_template 关系
     * @param visaProductId
     * @param templateId
     */
    void insertVisaProductTemplate(Long visaProductId, Long templateId);

    /**
     * 分页查询签证产品
     * @param visaProductPageQueryDTO
     * @return
     */
    Page<VisaProduct> pageWithDetails(VisaProductPageQueryDTO visaProductPageQueryDTO);


    /**
     * 根据id查询签证产品
     * @param id
     * @return
     */
    VisaProduct getById(Long id);  // 将返回类型从 VisaProductVO 改为 VisaProduct

    /**
     * 编辑签证产品
     * @param visaProduct
     */
    void update(VisaProduct visaProduct);

    /**
     * 根据签证产品id删除签证产品和模板的关联
     * @param visaProductId
     */
    void deleteVisaProductTemplateByVisaProductId(Long visaProductId);

    /**
     * 修改状态
     * @param visaProduct
     */
    @Update("UPDATE visa_product SET is_show = #{isShow} WHERE id = #{id}")
    void updateStatus(VisaProduct visaProduct);

    /**
     * 获取所有签证产品列表（用于下拉选择）
     * @return
     */
    @Select("SELECT id, name FROM visa_product WHERE is_show = 1 ORDER BY name")
    List<VisaProduct> getAllForSelect();

    /**
     * 获取所有启用的签证产品列表
     * @return
     */
    @Select("SELECT id, name FROM visa_product WHERE is_show = 1 ORDER BY create_time DESC")
    List<VisaProduct> getAllEnabledProducts();

    /**
     * 根据id删除签证产品
     * @param id
     */
    @Delete("DELETE FROM visa_product WHERE id = #{id}")
    void deleteVisaProduct(Long id);
    
    /**
     * 根据国家id查询签证产品列表
     * @param countryId
     * @return
     */
    List<VisaProduct> getByCountryId(Long countryId);
}
